package cz.pecinovsky.česky.oopnz._101_;
//Příliš žluťoučký kůň úpěl ďábelské ódy

import cz.pecinovsky.česky.oopnz._000_.Run;

import cz.pecinovsky.česky.oopnz.utility.Barva;
import cz.pecinovsky.česky.oopnz.utility.IO;

/////%I+ <114
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Plátno;
/////%I-

////%I+ <110
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Elipsa;
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Obdélník;
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Trojúhelník;
/////%I-

/////%I+ >110 -014
//import cz.pecinovsky.česky.oopnz.tvary_02_znaji_rozhraní.Přesouvač;
//
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Elipsa;
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Obdélník;
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Trojúhelník;
/////%I-

import cz.pecinovsky.česky.oopnz.správce.Elipsa;
import cz.pecinovsky.česky.oopnz.správce.Obdélník;
import cz.pecinovsky.česky.oopnz.správce.Trojúhelník;

import cz.pecinovsky.česky.oopnz.správce.Přesouvač;
import cz.pecinovsky.česky.oopnz.správce.SprávcePlátna;


////////////////////////////////////////////////////////////////////////////////
//%%+  +++++ Konec ignorovaného počátečního textu +++++
//%X+ xxxxx Začátek přeskakovaného textu xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí:   Není - toto_je_nově_definovaná_třída
 *              Ttt v projektu Ppp
 * Následující: Prozatím není
 *
 * Projekt  Ppp
 *   + Přidáno
 *   - Odebráno
 *   ~ Změněno
 *</pre>
 */
public class Domek_107_114
{    private Domek_107_114() {}   static
////////////////////////////////////////////////////////////////////////////////
//%X- ----- Konec přeskakovaného textu -----


/*******************************************************************************
 * Testovací třída {@code PrázdnáTestovacíTřída}  slouží ke komplexnímu otestování
 * třídy {@link PrázdnáTestovacíTřída}.
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class Domek extends junit.framework.TestCase
{
    private Obdélník budova;
    private Obdélník komín;
    private Trojúhelník střecha;
//%A+ >109
    private Obdélník    okno;
    private Obdélník    dveře;
//%A-

//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří test se zadaným názvem.
     *
     * @param název  Název konstruovaného testu
     */
    public Domek( String název )
    {
        super(název);
    }



//== PŘÍPRAVA A ÚKLID PŘÍPRAVKU ================================================

    /***************************************************************************
     * Inicializace předcházející spuštění každého testu a připravující tzv.
     * přípravek (fixture), což je sada objektů, s nimiž budou testy pracovat.
     */
    @Override
    protected void setUp()
    {
//%I+ <109
//        budova  = new Obdélník   ( 50, 200, 200, 100);
//        komín   = new Obdélník   (100, 100,  20,  50);
//        střecha = new Trojúhelník( 50, 100, 200, 100);
//%I-
//%A+ >109
        budova  = new Obdélník   ( 50, 200, 200, 100, Barva.OKROVÁ);
        komín   = new Obdélník   (100, 100,  20,  50, Barva.ČERVENÁ);
        střecha = new Trojúhelník( 50, 100, 200, 100, Barva.ČERVENÁ);
        okno    = new Obdélník   ( 75, 225,  50,  50, Barva.AZUROVÁ);
        dveře   = new Obdélník   (175, 225,  50,  75, Barva.HNĚDÁ);
//%A-
//%A+ >114
        budova .nakresli();
        komín  .nakresli();
        střecha.nakresli();
        okno   .nakresli();
        dveře  .nakresli();
//%A-
        IO.zpráva("Domek připraven");
    }


    /***************************************************************************
     * Úklid po testu - tato metoda se spustí po vykonání každého testu.
     */
    @Override
    protected void tearDown()
    {
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== VLASTNÍ TESTY =============================================================
//
//     /***************************************************************************
//      *
//      */
//     public void testXXX()
//     {
//     }

    public void testKouř()
    {
        Elipsa k1 = new Elipsa(100,  50,  50,  50);
        Elipsa k2 = new Elipsa(125,  25,  75,  50);
        Elipsa k3 = new Elipsa(150,   0, 100,  50);
//%A+ >114
        k1.nakresli();
        k2.nakresli();
        k3.nakresli();
//%A-
    }

//%A+ >108 

    public void testObarvi()
    {
        střecha.setBarva(Barva.ČERVENÁ);
//%A-
//%I+ >108 -114
//        budova .setBarva(Barva.OKROVÁ);
//%I-
//%A+ >114
        budova .setBarva(Barva.ŽLUTÁ);
//%A-
//%A+ >108
    }

//%A-
//%A+ >=110z

    public void testSluníčko()
    {
        Elipsa slunce = new Elipsa(0, 0, 50, 50, Barva.ŽLUTÁ);
        slunce.setPozice(-50, 0);
//%A-
//%A+ >114
        slunce.nakresli();
//%A-
//%A+ >=110z
        Přesouvač přes = new Přesouvač(5);
        přes.přesunNa(300, 0, slunce);
    }

//%A-
}

//%%-  ----- Začátek ignorovaného závěrečného textu -----
////////////////////////////////////////////////////////////////////////////////
//== TESTY A METODA MAIN =======================================================
//Není-li třída testovací, následující dvě metody se smažou
//%X+   Metoda připravená k vložení do testovacích tříd
     /** */
     public void testPřípravek() {}
//%X-


    /***************************************************************************
     * Třída, jejíž instance má na starosti úklid mezi jednotlivými testy,
     * který není možno zakomponovat do metody {@code tearDown()},
     * dokud nebudou studenti umět programovat.
     */
    private static class TearDown implements Run.ITD
    {
        /** {@inheritDoc} */
        @Override
        public void ukliď()
        {
//            Plátno.smažPlátno();
            SprávcePlátna.getInstance().odstraňVše();
        }
    }


    /***************************************************************************
     * Testovací metoda.
     */
    public static void test()
    {
////Nejedná-li se o testovací třídu, celý blok lze smazat
//        junit.textui.TestRunner.run(suite());
//        junit.textui.TestRunner.run(new Třída("test"));
        Run.tests(Domek.class,
                new TearDown(),
//                "testPřípravek",
//                "testKouř",
//                "testObarvi",
//                "testSluníčko",
                "");
        System.exit(0);
    }
    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main( String[] args )  {  test();  }
}
